/*
 * @Author: error: error: git config user.name & please set dead value or install git && error: git config user.email & please set dead value or install git & please set dead value or install git
 * @Date: 2023-11-27 14:20:56
 * @LastEditors: error: error: git config user.name & please set dead value or install git && error: git config user.email & please set dead value or install git & please set dead value or install git
 * @LastEditTime: 2023-11-27 14:21:25
 * @FilePath: \every-little-progress\day 371\test.cc
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */



// 455. 分发饼干
// https://leetcode.cn/problems/assign-cookies/description/
// 假设你是一位很棒的家长，想要给你的孩子们一些小饼干。但是，每个孩子最多只能给一块饼干。

// 对每个孩子 i，都有一个胃口值 g[i]，这是能让孩子们满足胃口的饼干的最小尺寸；并且每块饼干 j，都有一个尺寸 s[j] 。如果 s[j] >= g[i]，我们可以将这个饼干 j 分配给孩子 i ，这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子，并输出这个最大数值。

 
// 示例 1:

// 输入: g = [1,2,3], s = [1,1]
// 输出: 1
// 解释: 
// 你有三个孩子和两块小饼干，3个孩子的胃口值分别是：1,2,3。
// 虽然你有两块小饼干，由于他们的尺寸都是1，你只能让胃口值是1的孩子满足。
// 所以你应该输出1。
// 示例 2:

// 输入: g = [1,2], s = [1,2,3]
// 输出: 2
// 解释: 
// 你有两个孩子和三块小饼干，2个孩子的胃口值分别是1,2。
// 你拥有的饼干数量和尺寸都足以让所有孩子满足。
// 所以你应该输出2.
 

// 提示：

// 1 <= g.length <= 3 * 104
// 0 <= s.length <= 3 * 104
// 1 <= g[i], s[j] <= 231 - 1


class Solution {
public:
    int findContentChildren(vector<int>& g, vector<int>& s) {
        sort(g.begin(), g.end());
        sort(s.begin(), s.end());
        int cnt = 0;
        auto itg = g.begin();
        auto its = s.begin();
        while(itg != g.end() && its != s.end())
        {
            if(*itg <= *its)
            {
                ++cnt;
                ++itg;
                ++its;
            }
            else
                ++its;
        }

        return cnt;
    }
};

// class Solution {
//     bool enough(unordered_map<int, int>& hash, const int& n)
//     {
//         if(hash.find(n) == hash.end() || hash[n] == 0) return false;
//         --hash[n];
//         return true;
//     }
// public:
//     int findContentChildren(vector<int>& g, vector<int>& s) {
//         unordered_map<int, int> hash;
//         int cnt = 0;
//         for(const auto& e : s) ++hash[e];
//         for(const auto& e : g) if(enough(hash, e)) ++cnt;
//         return cnt;
//     }
// };